約 3,978,810 件
https://w.atwiki.jp/vstplugins/pages/119.html
ULTRAFOCUS High Resolution (日本輸入元) UltimateSoundBank (開発元) 主な特長 様々なシンセシスによる最高のサウンド波形を約24,000収録 クラッシクアナログ、FM/フォルマント、ウェーブテーブルからPCMや最新のアナ ログモデリングまで、あらゆるシンセシスを網羅 厳選された状態の良い、著名なシンセサイザーを多数収録 Alesis、Access、Arp、Casio、Clavia、Ensoniq、Fairlight、Kawai、Korg、 Kurzweil、Moog、Oberheim、PPG、Roland、Sequential Circuits、Synclavier、 Waldorf、Yamahaなどを収録 サンプラーを必要としない、高品位のサウンドライブラリーとプラグインが一体に なった、現在最も注目されているソフトウェアインストゥルメント もはや入手困難なレアなシンセサイザーも収録 デュアルレイヤーアーキテクチャーを使用した異なるシンセシスのレイヤー 新たなシンセサウンドを生み出す豊富なシンセパラメータ すぐに使用できる2000以上のプリセット 各方面から高い評価を得ているUVIエンジンを搭載したマルチフォーマットプラグイン 32bit処理による高品位サウンド 低CPU負荷 Windows/Mac OSに対応したハイブリッドパッケージ VST、AU、RTAS、MAS、DXi形式のプラグインとして動作 製品概要 Ultra Focusは様々なシンセシスの方式(ピュアアナログ、FM、フォルマントシンセシス、ウェーブテーブル、PCM、ベクトル シンセシス、アナログモデリングなど)を用いたサンプルをベースに、デュアルレイヤー アーキテクチャーにより、太いベース サウンドから音色豊かなパッド/リードサウンドなど、ユーザーが自在に作成可能。パッケージには、8GB(24,000サンプル)のサウンドライブラリーと日本語製本マニュアルが付属します。 名前 コメント
https://w.atwiki.jp/vst_prog/pages/61.html
トップページ プロジェクトの設定 コンパイル時のコード生成方法の設定と前項で作成した定義ファイル(.def)を読み込む設定を行う。 コンパイル時のコード生成方法が間違っていると、ホストプログラム(Cubase、Sonar等)が正しくDLLファイルを読み込めない。 また、定義ファイルの読み込み設定が間違っていると、コンパイル時にエラーとなり、DLLファイルが生成できない。 プロジェクトのプロパティを開く メニューから「プロジェクト」→「プロジェクト名のプロパティ」を選択する。 構成の変更 開いたプロジェクトプロパティのダイアログの左側から「構成プロパティ」を選択する。 ダイアログ左上にある「構成」がアクティブになるのでで「Release」を選択する。 文字コードの設定 プロジェクトプロパティダイアログの左側から「構成プロパティ」→「全般」を選択。 ダイアログの右側「文字セット」を「マルチバイト文字セットを使用する」に設定する。 コード生成の設定 プロジェクトプロパティダイアログの左側から「構成プロパティ」→「C/C++」→「コード生成」を選択。 ダイアログの右側「ランタイムライブラリ」を「マルチスレッド(/MT)」に設定する。 リンカの設定 プロジェクトプロパティダイアログの左側から「構成プロパティ」→「リンカ」→「入力」を選択。 ダイアログの右側「モジュール定義ファイル」に「../vstplug.def」を入力し「OK」を押す。 次へ 同一カテゴリのTips 項目 No. 概要 VC++ プロジェクトの準備 No.1 VC++でVST用のプロジェクトを作成する No.2 VSTを作成するに当たって必要なVST SDKファイルをVC++のプロジェクトに追加する No.3 VSTを作成するに当たって必要なvstplug.defファイルを作成する No.4 VSTを作成するに当たって必要なコンパイラ、リンカ設定を追加する No.5 VSTをコンパイルするの際の注意事項
https://w.atwiki.jp/vstplugins/pages/11.html
KONTAKT 2 定番のソフトサンプラー。幅広い対応フォーマットで、Halionとともに高い人気を誇る。 MIDIA (日本輸入元) Native-Instruments (開発元) ソフトウェア バージョン履歴 2.1.1 公開日 2006/06/01 主な特徴 15GB以上の膨大で即戦力のプロフェッショナル・サンプル・ライブラリーを標準装備 ダイナミックなリソース・アロケーションを備えた高性能なオーディオ・エンジン 192KHz、32ビットの高解像度サンプル・エンジン 制限のない同時発音数と64レイヤー可能なマルチ・ティンバー リアルタイムのグラニュラー・タイム・ストレッチングおよびリシンセシス 5種のサンプル・モード:クラシック、トーン、タイム・マシン1 2,ビート・マシン 広範囲にわたるモジュレーション機能とそれらのグラフィック表示 フィルタやモジュレーター、グループ・エディタ、マッピング・エディタやループ・エディタにより、ゾーンやスライシング・ループを簡単に操作可能 スライス・インフォメーションを含む「REX」「Apple Loops」ファイルをサポート テンポに同期した独特なステップ・シーケンサー、LFO、マルチステージ・エンベロープ 8つのループ・ポイントをサポートしたループ・エディターを搭載 リリース・トリガー、キー・スイッチ対応およびVSTオートメーション対応 インパルス・レスポンス・エフェクトで得られる限りなく本物に近い残響音 EQ、ディレイ、リバーブ、ウェーブシェイパーなど30以上のフィルターとエフェクトを搭載 ユニバーサル・インポート (約30種のサンプル、ライブラリー・フォーマッ トとの互換性) DFD(Direct From Disc)機能によりハードディスク・ストリーミング機能をサポート RAMセイビング・サンプルパージ機能 (RAMの節約機能) マルチプル・アンドゥ/リドゥ (アンドゥの記録保持 ヒストリー対応) マッピングとループ・エディターのウィンドウを単独で開くことが可能(スタンド・アローン時) キーボード・ショートカット対応 (作業の効率化) マスター・セクション (グローバル・テンポ・セッティング、マスター・チューンとチューニング・トーン、メトロノーム) キーボードによるトグルのオン/オフ機能 最大16チャンネルのミックスが可能な、高度なサラウンド・サウンド機能 KONTAKTスクリプト・プロセッサー(KSP)によりエンジンや機能をカスタマイズ可能 ドラッグ&ドロップによる簡便なサンプル管理 直感的な操作感を提供する最新ユーザー・インターフェースと数々の画期的な機能を搭載 フレキシブルなモジュール・アーキテクチャーで、欲しいサウンドを簡単に得ることが可能 高性能ブラウザ機能により基本情報を簡潔に表示 マルチプロセッサー対応 (Mac OS:G4/G5 Dual, Windows:SSE) スタンドアローンまたはプラグインとして動作可能 対応サンプル・フォーマット GigaStudio, Akai S-1000/S-3000/S-5000/S-6000/MPC/MESA, EXS24, HALion, AIFF, WAV, .S, .SND, Emu EOS/E4B, EMU E3/ESi, SoundFont2, REX I II, ACID, Apple Loops, Roland S-5x/S-7x, MachFive, Reason NN-XT, LM4, LM4-mkII, SDII(Mac), Unity, Pulsar+STS, Ensoniq EPS/ASR, Kurzweil, Reaktor Map, KOMPAKT, INTAKT, KONTAKT 1.x, BATTERY 1 2 対応プラグイン・フォーマット ■Windows XP: VST2.0/ DXi/ RTAS および「スタンドアロン」単体動作 (オーディオドライバ=ASIO/DirectSound) ■Mac OS X: AudioUnits/ VST2.0/ RTAS および「スタンドアロン」単体動作 (オーディオドライバ=Core Audio/ASIO) 名前 コメント
https://w.atwiki.jp/vstdev/pages/14.html
VSTの開発環境について スタインバーグのVSTSDKはC++で書かれています。 windowsの方はVC++や無料のものならVC++express editionが良いでしょう。 macの方は【CodeWarriorが良いかと思われます。 VC++express editionの入手先 http //www.microsoft.com/japan/msdn/vstudio/Express/
https://w.atwiki.jp/vst_prog/pages/79.html
トップページ MIDIメッセージ処理(改良版) MIDIメッセージにあわせて動作するVSTのサンプルの改良版である。 下記VSTはSynthとしてロードされ、常にノイズを発生させる。実行時は音量に注意してほしい。 ノイズのボリュームをMIDI CC7でコントロールできる。 サンプルコード全体 【CMidiMsg.h】 #pragma once#include string.h #include "audioeffectx.h" // ============================================================================================// MIDI処理用の定義// ============================================================================================#define MIDIMSG_MAXNUM 255 struct MidiMessage{VstInt32 deltaFrames; //MIDIメッセージを処理するタイミングunsigned char message; //MIDIメッセージ番号unsigned char channel; //MIDIチャンネルunsigned char data1; //MIDIデータ1unsigned char data2; //MIDIデータ2}; class CMidiMsg{protected int cur; //読み込み中のMIDIの位置int num; //受け取ったMIDIメッセージの数MidiMessage buf[MIDIMSG_MAXNUM]; //受け取ったMIDIメッセージを保管するバッファpublic CMidiMsg(void);~CMidiMsg(void); // バッファのクリア等を行う。virtual void clearMidiMsg(); // MIDIメッセージをバッファに追加する// バッファへの追加が成功すると1、失敗すると0を返すvirtual int addMidiMsg(VstMidiEvent *midievent);virtual int addMidiMsg(MidiMessage msg); // バッファからMIDIメッセージを取り出すvirtual MidiMessage getMidiMsg(); // バッファ中にあるMIDIメッセージの数を返すvirtual VstInt32 getMidiMessageNum(); // バッファから最初に取り出せるMIDIメッセージのDeltaFramesを返すvirtual VstInt32 getNextDeltaFrames(); // MIDIメッセージが何かを判断し、そのメッセージに対応した// onMidiKeyOn()関数、onMidiControlChange()関数等を呼び出す。virtual void midiProc(MidiMessage mididata); // midiProc()関数から呼び出される。// それぞれのMIDIメッセージに応じて処理を行う// 以下6つはオーバーライドして使うとよいvirtual void onMidiKeyOn (unsigned char channel, unsigned char noteNo, unsigned char velo) {}; // 関数の中身は空virtual void onMidiKeyOff (unsigned char channel, unsigned char noteNo, unsigned char velo) {}; // 関数の中身は空virtual void onMidiProgramChange(unsigned char channel, unsigned char program) {}; // 関数の中身は空virtual void onMidiPoliKeyPress (unsigned char channel, unsigned char noteNo, unsigned char pressure) {}; // 関数の中身は空virtual void onMidiChannelPress (unsigned char channel, unsigned char pressure) {}; // 関数の中身は空virtual void onMidiPitchBend (unsigned char channel, short pb) {}; // 関数の中身は空// 以下2つはあまりオーバーライドして使う必要はないvirtual void onMidiSystemMessage(unsigned char systemmsg, unsigned char data1, unsigned char data2); // 中身はCMidiMsg.cppに記載virtual void onMidiControlChange(unsigned char channel, unsigned char cc, unsigned char value); // 中身はCMidiMsg.cppに記載 // onMidiSystemMessage()関数より呼び出される。// システムメッセージに応じて処理する関数// オーバーライドして使うとよい// (ただし、ホストアプリケーションからSystem Messageが送られることはあまり無い?)virtual void onMidiQuarterFrame(unsigned char data) {};virtual void onMidiSongPointer(short songpoint) {};virtual void onMidiSongSelect(unsigned char data) {};virtual void onMidiChainRequest() {};virtual void onMidiTimingClock() {};virtual void onMidiStart() {};virtual void onMidiContinue() {};virtual void onMidiStop(){};virtual void onMidiActiveSensing() {};virtual void onMidiSystemReset() {}; // onMidiControlChange()関数より呼び出される。// コントロールチェンジメッセージに応じて処理する関数// オーバーライドして使うとよいvirtual void onMidiCC000 (unsigned char channel, unsigned char value) {};virtual void onMidiCC001 (unsigned char channel, unsigned char value) {}; // ModulationDepthvirtual void onMidiCC002 (unsigned char channel, unsigned char value) {};virtual void onMidiCC003 (unsigned char channel, unsigned char value) {};virtual void onMidiCC004 (unsigned char channel, unsigned char value) {};virtual void onMidiCC005 (unsigned char channel, unsigned char value) {}; // PortamentTimevirtual void onMidiCC006 (unsigned char channel, unsigned char value) {};virtual void onMidiCC007 (unsigned char channel, unsigned char value) {}; // ChannelVolumevirtual void onMidiCC008 (unsigned char channel, unsigned char value) {};virtual void onMidiCC009 (unsigned char channel, unsigned char value) {};virtual void onMidiCC010 (unsigned char channel, unsigned char value) {}; // Panvirtual void onMidiCC011 (unsigned char channel, unsigned char value) {};virtual void onMidiCC012 (unsigned char channel, unsigned char value) {}; // Expressionvirtual void onMidiCC013 (unsigned char channel, unsigned char value) {};virtual void onMidiCC014 (unsigned char channel, unsigned char value) {};virtual void onMidiCC015 (unsigned char channel, unsigned char value) {};virtual void onMidiCC016 (unsigned char channel, unsigned char value) {};virtual void onMidiCC017 (unsigned char channel, unsigned char value) {};virtual void onMidiCC018 (unsigned char channel, unsigned char value) {};virtual void onMidiCC019 (unsigned char channel, unsigned char value) {};virtual void onMidiCC020 (unsigned char channel, unsigned char value) {};virtual void onMidiCC021 (unsigned char channel, unsigned char value) {};virtual void onMidiCC022 (unsigned char channel, unsigned char value) {};virtual void onMidiCC023 (unsigned char channel, unsigned char value) {};virtual void onMidiCC024 (unsigned char channel, unsigned char value) {};virtual void onMidiCC025 (unsigned char channel, unsigned char value) {};virtual void onMidiCC026 (unsigned char channel, unsigned char value) {};virtual void onMidiCC027 (unsigned char channel, unsigned char value) {};virtual void onMidiCC028 (unsigned char channel, unsigned char value) {};virtual void onMidiCC029 (unsigned char channel, unsigned char value) {};virtual void onMidiCC030 (unsigned char channel, unsigned char value) {};virtual void onMidiCC031 (unsigned char channel, unsigned char value) {};virtual void onMidiCC032 (unsigned char channel, unsigned char value) {};virtual void onMidiCC033 (unsigned char channel, unsigned char value) {};virtual void onMidiCC034 (unsigned char channel, unsigned char value) {};virtual void onMidiCC035 (unsigned char channel, unsigned char value) {};virtual void onMidiCC036 (unsigned char channel, unsigned char value) {};virtual void onMidiCC037 (unsigned char channel, unsigned char value) {};virtual void onMidiCC038 (unsigned char channel, unsigned char value) {};virtual void onMidiCC039 (unsigned char channel, unsigned char value) {};virtual void onMidiCC040 (unsigned char channel, unsigned char value) {};virtual void onMidiCC041 (unsigned char channel, unsigned char value) {};virtual void onMidiCC042 (unsigned char channel, unsigned char value) {};virtual void onMidiCC043 (unsigned char channel, unsigned char value) {};virtual void onMidiCC044 (unsigned char channel, unsigned char value) {};virtual void onMidiCC045 (unsigned char channel, unsigned char value) {};virtual void onMidiCC046 (unsigned char channel, unsigned char value) {};virtual void onMidiCC047 (unsigned char channel, unsigned char value) {};virtual void onMidiCC048 (unsigned char channel, unsigned char value) {};virtual void onMidiCC049 (unsigned char channel, unsigned char value) {};virtual void onMidiCC050 (unsigned char channel, unsigned char value) {};virtual void onMidiCC051 (unsigned char channel, unsigned char value) {};virtual void onMidiCC052 (unsigned char channel, unsigned char value) {};virtual void onMidiCC053 (unsigned char channel, unsigned char value) {};virtual void onMidiCC054 (unsigned char channel, unsigned char value) {};virtual void onMidiCC055 (unsigned char channel, unsigned char value) {};virtual void onMidiCC056 (unsigned char channel, unsigned char value) {};virtual void onMidiCC057 (unsigned char channel, unsigned char value) {};virtual void onMidiCC058 (unsigned char channel, unsigned char value) {};virtual void onMidiCC059 (unsigned char channel, unsigned char value) {};virtual void onMidiCC060 (unsigned char channel, unsigned char value) {};virtual void onMidiCC061 (unsigned char channel, unsigned char value) {};virtual void onMidiCC062 (unsigned char channel, unsigned char value) {};virtual void onMidiCC063 (unsigned char channel, unsigned char value) {};virtual void onMidiCC064 (unsigned char channel, unsigned char value) {}; // DumperPedalvirtual void onMidiCC065 (unsigned char channel, unsigned char value) {}; // PortamentOnOffvirtual void onMidiCC066 (unsigned char channel, unsigned char value) {}; // SostenutoPedalvirtual void onMidiCC067 (unsigned char channel, unsigned char value) {}; // SoftPedalvirtual void onMidiCC068 (unsigned char channel, unsigned char value) {};virtual void onMidiCC069 (unsigned char channel, unsigned char value) {};virtual void onMidiCC070 (unsigned char channel, unsigned char value) {};virtual void onMidiCC071 (unsigned char channel, unsigned char value) {}; // Resonancevirtual void onMidiCC072 (unsigned char channel, unsigned char value) {}; // ReleaseTimevirtual void onMidiCC073 (unsigned char channel, unsigned char value) {}; // AttackTimevirtual void onMidiCC074 (unsigned char channel, unsigned char value) {}; // Brightnessvirtual void onMidiCC075 (unsigned char channel, unsigned char value) {}; // DecayTimevirtual void onMidiCC076 (unsigned char channel, unsigned char value) {}; // VibratoRatevirtual void onMidiCC077 (unsigned char channel, unsigned char value) {}; // VibratoDepthvirtual void onMidiCC078 (unsigned char channel, unsigned char value) {}; // VibratoDelayvirtual void onMidiCC079 (unsigned char channel, unsigned char value) {};virtual void onMidiCC080 (unsigned char channel, unsigned char value) {};virtual void onMidiCC081 (unsigned char channel, unsigned char value) {};virtual void onMidiCC082 (unsigned char channel, unsigned char value) {};virtual void onMidiCC083 (unsigned char channel, unsigned char value) {};virtual void onMidiCC084 (unsigned char channel, unsigned char value) {};virtual void onMidiCC085 (unsigned char channel, unsigned char value) {};virtual void onMidiCC086 (unsigned char channel, unsigned char value) {};virtual void onMidiCC087 (unsigned char channel, unsigned char value) {};virtual void onMidiCC088 (unsigned char channel, unsigned char value) {};virtual void onMidiCC089 (unsigned char channel, unsigned char value) {};virtual void onMidiCC090 (unsigned char channel, unsigned char value) {};virtual void onMidiCC091 (unsigned char channel, unsigned char value) {}; // ReverbSendvirtual void onMidiCC092 (unsigned char channel, unsigned char value) {}; // ChorusSendvirtual void onMidiCC093 (unsigned char channel, unsigned char value) {};virtual void onMidiCC094 (unsigned char channel, unsigned char value) {};virtual void onMidiCC095 (unsigned char channel, unsigned char value) {};virtual void onMidiCC096 (unsigned char channel, unsigned char value) {};virtual void onMidiCC097 (unsigned char channel, unsigned char value) {};virtual void onMidiCC098 (unsigned char channel, unsigned char value) {};virtual void onMidiCC099 (unsigned char channel, unsigned char value) {};virtual void onMidiCC100 (unsigned char channel, unsigned char value) {};virtual void onMidiCC101 (unsigned char channel, unsigned char value) {};virtual void onMidiCC102 (unsigned char channel, unsigned char value) {};virtual void onMidiCC103 (unsigned char channel, unsigned char value) {};virtual void onMidiCC104 (unsigned char channel, unsigned char value) {};virtual void onMidiCC105 (unsigned char channel, unsigned char value) {};virtual void onMidiCC106 (unsigned char channel, unsigned char value) {};virtual void onMidiCC107 (unsigned char channel, unsigned char value) {};virtual void onMidiCC108 (unsigned char channel, unsigned char value) {};virtual void onMidiCC109 (unsigned char channel, unsigned char value) {};virtual void onMidiCC110 (unsigned char channel, unsigned char value) {};virtual void onMidiCC111 (unsigned char channel, unsigned char value) {};virtual void onMidiCC112 (unsigned char channel, unsigned char value) {};virtual void onMidiCC113 (unsigned char channel, unsigned char value) {};virtual void onMidiCC114 (unsigned char channel, unsigned char value) {};virtual void onMidiCC115 (unsigned char channel, unsigned char value) {};virtual void onMidiCC116 (unsigned char channel, unsigned char value) {};virtual void onMidiCC117 (unsigned char channel, unsigned char value) {};virtual void onMidiCC118 (unsigned char channel, unsigned char value) {};virtual void onMidiCC119 (unsigned char channel, unsigned char value) {};virtual void onMidiCC120 (unsigned char channel, unsigned char value) {}; // AllSoundOffvirtual void onMidiCC121 (unsigned char channel, unsigned char value) {}; // AllControlResetvirtual void onMidiCC122 (unsigned char channel, unsigned char value) {};virtual void onMidiCC123 (unsigned char channel, unsigned char value) {};virtual void onMidiCC124 (unsigned char channel, unsigned char value) {};virtual void onMidiCC125 (unsigned char channel, unsigned char value) {};virtual void onMidiCC126 (unsigned char channel, unsigned char value) {}; // MonoModeOnOffvirtual void onMidiCC127 (unsigned char channel, unsigned char value) {}; // PoliModeOnOff}; 【CMidiMsg.cpp】 #include "CMidiMsg.h" CMidiMsg CMidiMsg(void){clearMidiMsg();} CMidiMsg ~CMidiMsg(void){} void CMidiMsg clearMidiMsg(){// メンバー変数を初期化するcur=0;num=0;memset(buf, 0, sizeof(MidiMessage)*MIDIMSG_MAXNUM);} int CMidiMsg addMidiMsg(VstMidiEvent *midievent){MidiMessage tmp;tmp.deltaFrames = midievent- deltaFrames;tmp.message = midievent- midiData[0] 0xF0;tmp.channel = midievent- midiData[0] 0x0F;tmp.data1 = midievent- midiData[1];tmp.data2 = midievent- midiData[2]; return addMidiMsg(tmp);} int CMidiMsg addMidiMsg(MidiMessage msg){// バッファがいっぱいなら0を返すif (num = MIDIMSG_MAXNUM)return 0; buf[num] = msg; num++;if (num MIDIMSG_MAXNUM) {num = MIDIMSG_MAXNUM;} return 1;}; MidiMessage CMidiMsg getMidiMsg(){MidiMessage tmp = buf[cur]; num--;if( num 0) { num = 0; } cur++;if( cur = MIDIMSG_MAXNUM) { cur = MIDIMSG_MAXNUM -1;} return tmp;} VstInt32 CMidiMsg getMidiMessageNum(){return num;} VstInt32 CMidiMsg getNextDeltaFrames(){return buf[cur].deltaFrames;} void CMidiMsg midiProc(MidiMessage mididata){short msb = 0;short lsb = 0;short pitchbend = 0; switch (mididata.message 0xF0){case 0x80 // ノートオフメッセージonMidiKeyOff(mididata.channel, mididata.data1, mididata.data2);break; case 0x90 // ノートオンメッセージ// ヴェロシティが0の場合はノートオフメッセージとして扱うif (mididata.data2 0){onMidiKeyOn(mididata.channel, mididata.data1, mididata.data2);}else{onMidiKeyOff(mididata.channel, mididata.data1, mididata.data2);}break; case 0xA0 // キープレッシャーメッセージonMidiPoliKeyPress(mididata.channel, mididata.data1, mididata.data2);break; case 0xB0 // コントロールチェンジメッセージonMidiControlChange(mididata.channel, mididata.data1, mididata.data2);break; case 0xC0 // プログラムチェンジメッセージonMidiProgramChange(mididata.channel, mididata.data1);break; case 0xD0 // チャンネルプレッシャーメッセージonMidiChannelPress(mididata.channel, mididata.data1);break; case 0xE0 // ピッチベンドメッセージlsb = (mididata.data1);msb = (mididata.data2);pitchbend = ((msb 7) | lsb) - 8192;onMidiPitchBend(mididata.channel, pitchbend);break; case 0xF0 // システムメッセージonMidiSystemMessage((mididata.message 0xF0) | (mididata.channel 0x0F), mididata.data1, mididata.data2);break;}} void CMidiMsg onMidiSystemMessage(unsigned char systemmsg, unsigned char data1, unsigned char data2){ short lsb = (data1);short msb = (data2);switch(systemmsg){case 0xF1 onMidiQuarterFrame(data1); break;case 0xF2 onMidiSongPointer( (msb 7) | lsb ); break;case 0xF3 onMidiSongSelect(data1); break;case 0xF6 onMidiChainRequest(); break;case 0xF8 onMidiTimingClock(); break;case 0xFA onMidiStart(); break;case 0xFB onMidiContinue(); break;case 0xFC onMidiStop(); break;case 0xFE onMidiActiveSensing(); break;case 0xFF onMidiSystemReset(); break;default break;}} void CMidiMsg onMidiControlChange(unsigned char channel, unsigned char cc, unsigned char value){switch(cc){case 0 onMidiCC000 (channel, value); break;case 1 onMidiCC001 (channel, value); break;case 2 onMidiCC002 (channel, value); break;case 3 onMidiCC003 (channel, value); break;case 4 onMidiCC004 (channel, value); break;case 5 onMidiCC005 (channel, value); break;case 6 onMidiCC006 (channel, value); break;case 7 onMidiCC007 (channel, value); break;case 8 onMidiCC008 (channel, value); break;case 9 onMidiCC009 (channel, value); break;case 10 onMidiCC010 (channel, value); break;case 11 onMidiCC011 (channel, value); break;case 12 onMidiCC012 (channel, value); break;case 13 onMidiCC013 (channel, value); break;case 14 onMidiCC014 (channel, value); break;case 15 onMidiCC015 (channel, value); break;case 16 onMidiCC016 (channel, value); break;case 17 onMidiCC017 (channel, value); break;case 18 onMidiCC018 (channel, value); break;case 19 onMidiCC019 (channel, value); break;case 20 onMidiCC020 (channel, value); break;case 21 onMidiCC021 (channel, value); break;case 22 onMidiCC022 (channel, value); break;case 23 onMidiCC023 (channel, value); break;case 24 onMidiCC024 (channel, value); break;case 25 onMidiCC025 (channel, value); break;case 26 onMidiCC026 (channel, value); break;case 27 onMidiCC027 (channel, value); break;case 28 onMidiCC028 (channel, value); break;case 29 onMidiCC029 (channel, value); break;case 30 onMidiCC030 (channel, value); break;case 31 onMidiCC031 (channel, value); break;case 32 onMidiCC032 (channel, value); break;case 33 onMidiCC033 (channel, value); break;case 34 onMidiCC034 (channel, value); break;case 35 onMidiCC035 (channel, value); break;case 36 onMidiCC036 (channel, value); break;case 37 onMidiCC037 (channel, value); break;case 38 onMidiCC038 (channel, value); break;case 39 onMidiCC039 (channel, value); break;case 40 onMidiCC040 (channel, value); break;case 41 onMidiCC041 (channel, value); break;case 42 onMidiCC042 (channel, value); break;case 43 onMidiCC043 (channel, value); break;case 44 onMidiCC044 (channel, value); break;case 45 onMidiCC045 (channel, value); break;case 46 onMidiCC046 (channel, value); break;case 47 onMidiCC047 (channel, value); break;case 48 onMidiCC048 (channel, value); break;case 49 onMidiCC049 (channel, value); break;case 50 onMidiCC050 (channel, value); break;case 51 onMidiCC051 (channel, value); break;case 52 onMidiCC052 (channel, value); break;case 53 onMidiCC053 (channel, value); break;case 54 onMidiCC054 (channel, value); break;case 55 onMidiCC055 (channel, value); break;case 56 onMidiCC056 (channel, value); break;case 57 onMidiCC057 (channel, value); break;case 58 onMidiCC058 (channel, value); break;case 59 onMidiCC059 (channel, value); break;case 60 onMidiCC060 (channel, value); break;case 61 onMidiCC061 (channel, value); break;case 62 onMidiCC062 (channel, value); break;case 63 onMidiCC063 (channel, value); break;case 64 onMidiCC064 (channel, value); break;case 65 onMidiCC065 (channel, value); break;case 66 onMidiCC066 (channel, value); break;case 67 onMidiCC067 (channel, value); break;case 68 onMidiCC068 (channel, value); break;case 69 onMidiCC069 (channel, value); break;case 70 onMidiCC070 (channel, value); break;case 71 onMidiCC071 (channel, value); break;case 72 onMidiCC072 (channel, value); break;case 73 onMidiCC073 (channel, value); break;case 74 onMidiCC074 (channel, value); break;case 75 onMidiCC075 (channel, value); break;case 76 onMidiCC076 (channel, value); break;case 77 onMidiCC077 (channel, value); break;case 78 onMidiCC078 (channel, value); break;case 79 onMidiCC079 (channel, value); break;case 80 onMidiCC080 (channel, value); break;case 81 onMidiCC081 (channel, value); break;case 82 onMidiCC082 (channel, value); break;case 83 onMidiCC083 (channel, value); break;case 84 onMidiCC084 (channel, value); break;case 85 onMidiCC085 (channel, value); break;case 86 onMidiCC086 (channel, value); break;case 87 onMidiCC087 (channel, value); break;case 88 onMidiCC088 (channel, value); break;case 89 onMidiCC089 (channel, value); break;case 90 onMidiCC090 (channel, value); break;case 91 onMidiCC091 (channel, value); break;case 92 onMidiCC092 (channel, value); break;case 93 onMidiCC093 (channel, value); break;case 94 onMidiCC094 (channel, value); break;case 95 onMidiCC095 (channel, value); break;case 96 onMidiCC096 (channel, value); break;case 97 onMidiCC097 (channel, value); break;case 98 onMidiCC098 (channel, value); break;case 99 onMidiCC099 (channel, value); break;case 100 onMidiCC100 (channel, value); break;case 101 onMidiCC101 (channel, value); break;case 102 onMidiCC102 (channel, value); break;case 103 onMidiCC103 (channel, value); break;case 104 onMidiCC104 (channel, value); break;case 105 onMidiCC105 (channel, value); break;case 106 onMidiCC106 (channel, value); break;case 107 onMidiCC107 (channel, value); break;case 108 onMidiCC108 (channel, value); break;case 109 onMidiCC109 (channel, value); break;case 110 onMidiCC110 (channel, value); break;case 111 onMidiCC111 (channel, value); break;case 112 onMidiCC112 (channel, value); break;case 113 onMidiCC113 (channel, value); break;case 114 onMidiCC114 (channel, value); break;case 115 onMidiCC115 (channel, value); break;case 116 onMidiCC116 (channel, value); break;case 117 onMidiCC117 (channel, value); break;case 118 onMidiCC118 (channel, value); break;case 119 onMidiCC119 (channel, value); break;case 120 onMidiCC120 (channel, value); break;case 121 onMidiCC121 (channel, value); break;case 122 onMidiCC122 (channel, value); break;case 123 onMidiCC123 (channel, value); break;case 124 onMidiCC124 (channel, value); break;case 125 onMidiCC125 (channel, value); break;case 126 onMidiCC126 (channel, value); break;case 127 onMidiCC127 (channel, value); break;default break;}} 【MyMidiSample2VST.cpp】 // ============================================================================================// インクルードファイル// ============================================================================================#include stdlib.h #include "audioeffectx.h" #include "CMidiMsg.h" // ============================================================================================// 設計情報の記入// ============================================================================================#define MY_VST_INPUT_NUM 2 //入力数。モノラル入力=1、ステレオ入力=2#define MY_VST_OUTPUT_NUM 2 //出力数。モノラル出力=1、ステレオ出力=2 #define MY_VST_UNIQUE_ID SMPL //ユニークID //公開する場合は以下URLで発行されたユニークIDを入力する。 //http //ygrabit.steinberg.de/~ygrabit/public_html/index.html #define MY_VST_PRESET_NUM 1 //プリセットプログラムの数#define MY_VST_PARAMETER_NUM 0 //パラメータの数 // ============================================================================================// VSTの基本となるクラス// ============================================================================================class MyMidiSample2VST public AudioEffectX , public CMidiMsg{protected float volume;public MyMidiSample2VST (audioMasterCallback audioMaster); // 音声信号を処理するメンバー関数virtual void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames); // MIDIメッセージをホストアプリケーションから受け取るためのメンバー関数VstInt32 processEvents (VstEvents* events); void onMidiCC007(unsigned char channel, unsigned char value);}; // ============================================================================================// このVSTのを生成するための関数// ============================================================================================AudioEffect* createEffectInstance (audioMasterCallback audioMaster){//newでこのVSTを生成したポインタを返すreturn new MyMidiSample2VST (audioMaster);} MyMidiSample2VST MyMidiSample2VST (audioMasterCallback audioMaster) AudioEffectX (audioMaster, MY_VST_PRESET_NUM, MY_VST_PARAMETER_NUM){//VSTの初期化を行う。 //以下の関数を呼び出して入力数、出力数等の情報を設定する。//必ず呼び出さなければならない。setNumInputs (MY_VST_INPUT_NUM); //入力数の設定setNumOutputs (MY_VST_OUTPUT_NUM); //出力数の設定setUniqueID (MY_VST_UNIQUE_ID); //ユニークIDの設定 isSynth (true); //このVSTがSynthかどうかのフラグを設定。 //Synthの場合…true、Effectorの場合…false canProcessReplacing (); //このVSTが音声処理可能かどうかのフラグを設定。 //音声処理を行わないVSTはないので必ずこの関数を呼び出す。 //上記の関数を呼び出した後に初期化を行うvolume = 1.0f;} void MyMidiSample2VST processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames){//入力、出力は2次元配列で渡される。//入力は-1.0f~1.0fの間で渡される。//出力は-1.0f~1.0fの間で書き込む必要がある。//sampleFramesが処理するバッファのサイズfloat* outL = outputs[0]; //出力 左用float* outR = outputs[1]; //出力 右用 for (int i = 0; i sampleFrames; i++){//ここで音声処理を行う。 // MIDIメッセージがあるか確認if ( getMidiMessageNum() 0){// MIDIメッセージを処理するタイミングかどうかを確認する。if( getNextDeltaFrames() = i){// MIDIメッセージをバッファから取り出し処理するmidiProc( getMidiMsg() );}} //出力バッファへ書き込む。outL[i] = volume * (float)((rand() % 256) -128) / 255.0f;outR[i] = volume * (float)((rand() % 256) -128) / 255.0f;}} // MIDIメッセージを処理するメンバー関数// processReplacing()の前に必ず1度だけ呼び出される。// VstInt32 MyMidiSample2VST processEvents (VstEvents* events){// MIDIのリストを初期化します。clearMidiMsg(); int loops = (events- numEvents); // VSTイベントの回数だけループをまわす。for (int i = 0;i loops; i++){// 与えられたイベントがMIDIならばmidimsgbufにストックするif ((events- events[i])- type == kVstMidiType){VstMidiEvent *midievent = (VstMidiEvent*)(events- events[i]);if( !addMidiMsg(midievent) ){break;}}} // 1を返さなければならないreturn 1;} // // onMidiCC007()関数をオーバーライドして、MIDI CC7の場合の動作を定義する。// ここではチャンネルに関係なく、MIDI CC7メッセージを受け取るとノイズのボリュームを// 変更するようにしている。void MyMidiSample2VST onMidiCC007 (unsigned char channel, unsigned char value){volume = (float)(value) / 127.0f;} VST Tipsトップページへ(準備中) 同一カテゴリのTips 項目 No. 概要
https://w.atwiki.jp/vst_prog/pages/62.html
VST Tips(準備中) コンパイル時の注意 ここではコンパイル・ビルドを実施してVST(DLLファイル)を生成する際の注意事項について記載する。 コンパイル、ビルド時の構成について コンパイル、ビルド時の警告について コンパイル、ビルドの構成の注意 コンパイル、ビルド時の構成を「Release」に設定する。 (「Debug」でも問題ないが、デバッグに必要な処理が追加される。作成したVSTを公開する場合は「Release」にするほうがよい。また、前項(準備中)はコンパイル、ビルド構成が「Release」であることが前提となっている。) コンパイル、ビルド時の構成を設定する方法はメニュー「ツール」下あたりにある「Debug」のリストボックスから「Release」を選択する。 コンパイル、ビルド時の警告 コンパイル、ビルドの結果は画面下側にある出力ウィンドウでビルド結果を確認できる。 以下の警告「warning C4996」はもともと出るので問題ない。 それ以外の警告やエラーが出るようであれば、プロジェクトの設定や、コードの誤字脱字について再確認する。 (プロジェクト設定の詳細については前項までに説明。「同一カテゴリのTips」参照) warning C4996 strncat This function or variable may be unsafe. Consider using strncat_s instead.To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. C \Program Files\Microsoft Visual Studio 9.0\VC\include\string.h(144) 【warning C4996】 strcpy,scanf等の関数を利用すると発生する警告。 ファオーバーフロー の対策ため表示される。 以下を定義するとエラーは出なくなる。 #define _CRT_SECURE_NO_DEPRECATE 1 生成されたファイルの確認 コンパイル・ビルドが正常に完了すると、.slnファイルのあるフォルダに新しいフォルダ「Release」が作成されている。 「Release」フォルダの中に「プロジェクト名.dll」というDLLファイルがVSTである。 VST Tipsトップページへ(準備中) 同一カテゴリのTips 項目 No. 概要 VC++ プロジェクトの準備 No.1 VC++でVST用のプロジェクトを作成する No.2 VSTを作成するに当たって必要なVST SDKファイルをVC++のプロジェクトに追加する No.3 VSTを作成するに当たって必要なvstplug.defファイルを作成する No.4 VSTを作成するに当たって必要なコンパイラ、リンカ設定を追加する No.5 VSTをコンパイルするの際の注意事項
https://w.atwiki.jp/vst_prog/pages/59.html
VST Tips(準備中) プロジェクトへのVST SDKファイル追加 VSTを作るうえで必要なVST SDKのCPPファイルをプロジェクトに追加する。 プロジェクトに必要なVST SDKのCPPファイルは以下のとおりである。 audioeffect.cpp audioeffectx.cpp vstplugmain.cpp 既存の項目の追加 画面右側のソリューションエクスプローラで「リソースファイル」を選択し、右クリックを押す。 開いたポップアップメニューで「追加」→「既存の項目」を選択する。 追加するファイルの選択 vstsdk2.4\public.sdk\source\vst2.xの配下にある以下3つのファイルを選択し、「追加」を押す。 audioeffect.cpp audioeffectx.cpp vstplugmain.cpp 「リソースファイル」の配下に3つのファイルが追加されれば完了。 次へ 同一カテゴリのTips 項目 No. 概要 VC++ プロジェクトの準備 No.1 VC++でVST用のプロジェクトを作成する No.2 VSTを作成するに当たって必要なVST SDKファイルをVC++のプロジェクトに追加する No.3 VSTを作成するに当たって必要なvstplug.defファイルを作成する No.4 VSTを作成するに当たって必要なコンパイラ、リンカ設定を追加する No.5 VSTをコンパイルするの際の注意事項
https://w.atwiki.jp/vst_prog/pages/78.html
トップページ MIDIメッセージをprocessReplacing()関数中で処理する方法 前項でprocessEvents()関数によってホストアプリケーションから受け取ったMIDIメッセージをprocessReplacing()関数で処理する方法を記載する。 サンプルコード サンプルコードではロードするとノイズを生成、出力するVSTとなっている。 MIDIのコントロールチェンジメッセージ 7番(ボリュームコントロール)によって出力されるノイズのボリュームを調整している。 void MyMidiSampleVST processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames){//入力、出力は2次元配列で渡される。//入力は-1.0f~1.0fの間で渡される。//出力は-1.0f~1.0fの間で書き込む必要がある。//sampleFramesが処理するバッファのサイズfloat* outL = outputs[0]; //出力 左用float* outR = outputs[1]; //出力 右用 // midieventlistの読み込み位置int midimsg_cursol = 0; for (int i = 0; i sampleFrames; i++){//ここで音声処理を行う。 // MIDIメッセージがあるか確認if ( midimsgnum 0){// MIDIメッセージを処理するタイミングかどうかを確認する。if( midimsgbuf[midimsg_cursol].deltaFrames = i){// MIDIメッセージがコントロールチェンジのボリューム変更(CC7)であった場合if( midimsgbuf[midimsg_cursol].message == 0xB0 midimsgbuf[midimsg_cursol].data1 == 7){volume = (float)( midimsgbuf[midimsg_cursol].data2) / 127.0f;} // midimsgbufからMIDIメッセージを読み出したので// 読み込み位置を進め、MIDIメッセージの数を減らすmidimsgnum--;midimsg_cursol++;}} //出力バッファへ書き込む。outL[i] = volume * (float)((rand() % 256) -128) / 255.0f;outR[i] = volume * (float)((rand() % 256) -128) / 255.0f;}} サンプルコードの解説 まず、MIDIメッセージを保存したバッファ(midimsgbuf)の読み込み位置を初期化とノイズのボリュームの初期化を行っている。(6~10行目) // midieventlistの読み込み位置 int midimsg_cursol = 0; // ノイズのボリューム static float volume = 1.0f; 次に音声処理を行うfor文の中でMIDIメッセージがあるか確認し、ある場合はMIDIメッセージを処理するタイミングかどうかを確認している。(17~34行目) // MIDIメッセージがあるか確認 if ( midimsgnum 0) { // MIDIメッセージを処理するタイミングかどうかを確認する。 if( midimsgbuf[midimsg_cursol].deltaFrames = i) { : : } } MIDIメッセージを処理するタイミングであった場合、通常はMIDIメッセージにあわせて以下のような処理を行う キーのオン、オフ処理 ピッチベンドの処理 コントロールチェンジ処理 今回はMIDIメッセージがコントロールチェンジのボリューム変更(7番)のみを処理し、ノイズのボリュームを変更する処理となっている。(22~27行目) // MIDIメッセージがコントロールチェンジのボリューム変更(CC7)であった場合 if( midimsgbuf[midimsg_cursol].message == 0xB0 midimsgbuf[midimsg_cursol].data1 == 7) { volume = (float)( midimsgbuf[midimsg_cursol].data2) / 127.0f; } MIDIメッセージを処理した場合、MIDIメッセージの数をしめすmidimsgnumを1減らし、同時にmidimsgbufの読み込み位置を1進める(31~32行目) // midimsgbufからMIDIメッセージを読み出したので // 読み込み位置を進め、MIDIメッセージの数を減らす midimsgnum--; midimsg_cursol++; 最後にノイズの生成と音声信号出力バッファへの書き込みを行っている。(37~38行目) outL[i] = volume * (float)((rand() % 256) -128) / 255.0f; outR[i] = volume * (float)((rand() % 256) -128) / 255.0f; 次へ 同一カテゴリのTips 項目 No. 概要 MIDIメッセージ処理 No.1 MIDIメッセージ処理で最小構成の自作VSTに追加する変数・関数 No.2 VSTの初期化とMIDIメッセージ処理関連の変数の初期化 No.3 ホストアプリケーションからMIDIメッセージを受け取る方法 No.4 MIDIメッセージをprocessReplacing()関数中で処理する方法 No.5 MIDIメッセージ処理で作成したVSTのサンプルソースコード全体(暫定版)
https://w.atwiki.jp/vst_prog/pages/22.html
Steinberg VST Audio Plug-Ins SDK 2.4のインストール方法(2010年4月14日) Steinberg 開発者アカウントの作成 Steinberg 開発者ページへ移動 下記URLへアクセスする。 URL http //www.steinberg.net/en/company/3rd_party_developer.html ページ下部にある「VST Audio Plug-Ins SDK(Version 2.3 and 2.4)」の横の画像をクリックする。(画像はもともとリンク切れ) 開発者ページへ移動する。 画面左メニューから「Create 3rd Party Developer Account」をクリックする。 開発者アカウントの作成1 開いたページ中央の「Country Prease choose」から「Japan」を選択し、「Next Step」をクリックする。 開発者アカウントの作成2 開いたページで必要事項を入力し、「I accept Steinberg s ~~~」にチェックをいれ「security code」を入力し、「Create account now」をクリックする。 開発者アカウントの作成3 次のページが開けば問題なく登録は完了。 メールボックスに以下のメールが届いたことを確認する。 件名 「Steinberg 3rd Party Developer Acount」 送信者「Steinberg Media Technologies GmbH noreply@steinberg.net 」 開発者アカウントの有効化 届いたメールの「To activate your account please click on this link 」の部分にあるリンクをクリックするとアカウントの作成は完了する。 You have read and accepted our privacy policy. To activate your account please click on this link http //www.steinberg.net/en/company/3rd_party_developer/ sdk_download_portal.html?~~~~~~~~~~~~~ (←この部分のリンクをクリック) After you have activated your account you can log-in to the 3rd Party Developer area using your username "XXXXXXXXXXXXXXXX" and your password. Your Steinberg Team ※注意 アカウントを作成からダウンロードページへのログイン可能になるまでしばらく時間がかかる模様。 また、ダウンロードページはInternet Explorer以外のブラウザでは正常に動作しない可能性がある。 次へ 合計: - 今日: - 昨日: -
https://w.atwiki.jp/vst_prog/pages/72.html
VST Tips(準備中) 音声処理を行う関数 ここでは最初で定義したMyMinimumVSTの以下2つの関数のうち、残りの音声処理を行うprocessReplacing()関数について詳細を記載する。 コンストラクタ void processReplacing() processReplacing()関数 AudioEffectXクラスを継承して作った自作クラスは必ずprocessReplacing()関数を継承しなくてはならない。 processReplacing()関数 void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames); processReplacing()関数の引数については以下のようになっている。 引数 説明 float** inputs 入力音声信号のバッファ。2次元配列で渡される。1次元目の大きさはコンストラクタにsetNumInputs()関数で指定したサイズ。2次元目の大きさは後述のsampleFramesとなる。書き込まれている音声信号は-1.0~+1.0の範囲 float** outputs 出力音声信号のバッファ。2次元配列で渡される。1次元目の大きさはコンストラクタでsetNumOutputs()関数に指定したサイズ。2次元目の大きさは後述のsampleFramesとなる音声信号は-1.0~+1.0の範囲で書き込まなければならない。 VstInt32 sampleFrames 入力音声信号、出力音声信号のバッファサイズ サンプルコード void MyMinimumVST processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames){//入力、出力は2次元配列で渡される。//入力は-1.0f~1.0fの間で渡される。//出力は-1.0f~1.0fの間で書き込む必要がある。//sampleFramesが処理するバッファのサイズfloat* inL = inputs[0]; //入力 左用float* inR = inputs[1]; //入力 右用float* outL = outputs[0]; //出力 左用float* outR = outputs[1]; //出力 右用 for (int i = 0; i sampleFrames; i++){//ここで音声処理を行う。 //出力バッファへ書き込む。outL[i] = inL[i];outR[i] = inR[i];}} サンプルコードの解説 まず、引数のinputs、outputsは2次元配列であり、各次元のサイズはは以下のようになっている。 inputs[チャンネル数][sampleFrames] outputs[チャンネル数][sampleFrames] 上記引数をわかりやすいよう、3~12行目で入力音声信号・出力音声信号ともにチャンネルごとに別の変数へ代入している。(この処理は必須ではない。) また、入力音声信号、出力音声信号がモノラルの場合は左用のみとなる。 float* inL = inputs[0]; //入力 左用 float* inR = inputs[1]; //入力 右用 float* outL = outputs[0]; //出力 左用 float* outR = outputs[1]; //出力 右用 次に、出力音声信号をoutputsに代入するため、sampleFrames分処理するループを作成する。 for (int i = 0; i sampleFrames; i++) { //ここで音声処理を行う。 } 最後に、上記のループ内で出力音声信号バッファに書き込みを行っている。 今回は入力音声信号をそのまま出力音声信号バッファに書き込んでいる。 //出力バッファへ書き込む。 outL[i] = inL[i]; outR[i] = inR[i]; 次へ 同一カテゴリのTips 項目 No. 概要 最小構成のVST No.1 最小構成の自作VSTに必要な関数等の説明。 No.2 最小構成の自作VSTの必須初期化項目について No.3 最小構成の自作VSTの音声処理関数について No.4 最小構成の自作VSTのサンプルソースコード全体